package br.org.fatec.inter.data;

import br.org.fatec.inter.model.Categoria;
import br.org.fatec.inter.util.DBManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Kennedy
 */
public class CategoriaDAO extends Conexao {

    /**
     * Cadastra uma Categoria na base de dados
     *
     * @param categoria Um objeto do tipo Categoria para ser cadastrado.
     * @return Retorna <b>True</b> se a Categoria foi cadastrado com sucesso, do
     * contrario retorna <b>False</b>
     */
    public boolean inserirCategoria(Categoria categoria) throws SQLException {
        String sql = "Insert into categoria(nome) values(?)";
        return DBManager.executarQuery(getConexao(), sql, categoria.getDescricao());
    }

    /**
     * Remove uma Categoria da base de dados.
     *
     * @param categoria Um objeto do tipo Categoria para ser removido.
     * @return Retorna <b>True</b> se a Categoria foi removida com sucesso, do
     * contrario retorna <b>False</b>
     */
    public boolean removerCategoria(Categoria categoria) throws SQLException {
        String sql = "delete from categoria where id = ?";
        return DBManager.executarQuery(getConexao(), sql, String.valueOf(categoria.getId()));
    }

    /**
     * Remove uma Categoria da base de dados.
     *
     * @param ID O identificados da Categoria na base de dados.
     * @return Retorna <b>True</b> se a Categoria foi removida com sucesso, do
     * contrario retorna <b>False</b>
     */
    public boolean removerCategoria(int id) throws SQLException {
        String sql = "delete from categoria where id = ?";
        return DBManager.executarQuery(getConexao(), sql, String.valueOf(id));
    }

    /**
     * Pesquisar categoria por id
     *
     * @param id id da categoria
     * @return Objeto categoria caso for encontrado, null caso contrario
     */
    public Categoria pesquisarCategoria(int id) throws SQLException {
        String sql = "select * from categorias where nome = " + String.valueOf(id);
        PreparedStatement ps = getConexao().prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            Categoria categoria = new Categoria();
            categoria.setId(rs.getInt("id"));
            categoria.setDescricao(rs.getString("nome"));
            return categoria;
        } else {
            return null;
        }
    }

    /**
     * Retorna uma lista de categorias que contenham o nome
     *
     * @param nome nome para a lista
     * @return uma lista
     */
    public ArrayList<Categoria> pesquisarCategoria(String nome) throws SQLException {
        ArrayList<Categoria> categorias = new ArrayList<Categoria>();
        //TODO rever o codigo SQL colokar LIKE
        String sql = "select * from categorias where nome = " + nome;
        PreparedStatement ps = getConexao().prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Categoria categoria = new Categoria();
            categoria.setId(rs.getInt("id"));
            categoria.setDescricao(rs.getString("nome"));
            categorias.add(categoria);
        }
        return categorias;
    }

    /**
     * Atualiza uma categoria
     *
     * @return <b>True</b> caso atualizado com sucesso, <b>False</b> caso
     * contrario
     */
    public boolean atualizarCategoria(Categoria categoria) throws SQLException {
        String sql = "update categoria set nome = ? where id = ?";
        return DBManager.executarQuery(getConexao(), sql, categoria.getDescricao(), String.valueOf(categoria.getId()));
    }
}
